package fr.iut2.tc1.client;

import java.util.ArrayList;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import fr.iut2.tc1.shared.UnTroll;

public class ListeImageTroll extends Composite implements ClickHandler {

	// ----- Panels -----
	private AbsolutePanel page;
	private AbsolutePanel header;
	private AbsolutePanel footer;
	private HorizontalPanel contentPanel;
	private HorizontalPanel actionPanel;

	// ----- Boutons -----
	private Button btnCreer;
	private Button btnModif;
	private Button btnSuppr;
	private Button btnSwitchView;

	private Label titre; // Titre
	private Galerie galerie; // Composite galerie
	private ImageTroll imgTroll;// Image du troll

	private ListeCaractImg caracTroll; // Widget caractéristiques

	private ArrayList<TrollResultSerialized> listeTrolls; // Sauvegarde

	@SuppressWarnings("static-access")
	// Suppression des warnings
	public ListeImageTroll(ArrayList<TrollResultSerialized> res) {
		listeTrolls = res;

		// ----- Titre -----
		titre = new Label("Galerie des Trolls");
		titre.setStyleName("titre");

		// ----- Initialisation des panels -----
		page = new AbsolutePanel();
		header = new AbsolutePanel();
		contentPanel = new HorizontalPanel();
		actionPanel = new HorizontalPanel();
		footer = new AbsolutePanel();

		// ------ Style des panels -----
		page.setStyleName("page");
		header.setStyleName("header");
		contentPanel.setStyleName("contentPanel");
		actionPanel.setStyleName("panelControl");
		footer.setStyleName("footer");
		actionPanel.setHorizontalAlignment(actionPanel.ALIGN_CENTER);

		// ----- Boutons -----
		btnSwitchView = new Button("Liste");
		btnSwitchView.addClickHandler(this);
		btnSwitchView.setStyleName("btn btnOtherView");

		btnCreer = new Button("Creer");
		btnCreer.setStyleName("btn");
		btnCreer.addClickHandler(this);

		btnModif = new Button("Modifier");
		btnModif.setStyleName("btn");
		btnModif.addClickHandler(this);

		btnSuppr = new Button("Supprimer");
		btnSuppr.setStyleName("btn");
		btnSuppr.addClickHandler(this);

		// ----- Singleton caractéristiques -----
		caracTroll = new ListeCaractImg();
		caracTroll.setStyleName("caracTroll");

		// ----- Singleton galerie -----
		galerie = new Galerie(res);
		galerie.setStyleName("galerie");

		// ----- image troll -----
		imgTroll = new ImageTroll();
		imgTroll.setStyleName("imageAffichage");

		// ----- header.add -----
		header.add(titre);
		header.add(btnSwitchView);

		// ----- actionPanel.add -----
		actionPanel.add(btnCreer);
		actionPanel.add(btnModif);
		actionPanel.add(btnSuppr);

		// ----- contentPanel.add -----
		contentPanel.add(imgTroll);
		contentPanel.add(caracTroll);

		// ----- page.add -----
		page.add(header);
		page.add(actionPanel);
		page.add(galerie);
		page.add(contentPanel);
		page.add(footer);

		// ----- InitWidget -----
		initWidget(page);
	}

	@Override
	public void onClick(ClickEvent event) {
		// ----- bouton supprimer -----
		if (event.getSource() == this.btnSuppr) {
			if (!this.galerie.getTrollFocus().equals(""))
				Troll.get().supprimerTroll(this.galerie.getTrollFocus());
		}

		// ----- bouton switch view -----
		if (event.getSource() == this.btnSwitchView) 
			Troll.get().changerPage(0);

		// ----- bouton créer -----
		if (event.getSource() == this.btnCreer) 
			Troll.get().changerPage(2);

		// ----- bouton modifier -----
		if (event.getSource() == this.btnModif) {
			UnTroll trollAModifier = null;
			boolean trollExist = false;

			for (int i = 0; i < listeTrolls.size(); i++) {
				if (listeTrolls.get(i).getName().equals(this.galerie.getTrollFocus())) {
					trollAModifier = new UnTroll(listeTrolls.get(i).getName(), listeTrolls.get(i).getRace(), listeTrolls.get(i).getNomImage());
					trollAModifier.setCaracteristiques(listeTrolls.get(i).getAttaque(), listeTrolls.get(i).getDegat(), listeTrolls.get(i).getEsquive(), listeTrolls.get(i).getRegeneration(), listeTrolls.get(i).getVie());
					trollAModifier.setPointsCompetence(listeTrolls.get(i).getComp1(), listeTrolls.get(i).getComp2());

					// Troll envoye
					Troll.get().setTrollToModif(trollAModifier);
					trollExist = true;
					break;
				}
			}

			if (trollExist) Troll.get().changerPage(3);
			else Window.alert("Aucun troll n'est sélectionné!");
		}
	}
}
